<?php

require_once 'classes/Historique.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de Historique
 * @author Alain 05.06.12
 */
class SChistorique{
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute un historique
    * @param Hitorique historique à ajouter
    */
   public function ajouter($unHistoriqueAMemoriser) {
       try{
           
           $query =  $this->db->prepare("INSERT INTO historique " .
                   "(dateHeure, commentaire, animal_id, cause_nom, personne_id, localite_npa) VALUES(" .
                   ":dateHeure, :commentaire, :animal_id, :cause_nom, :personne_id, :localite_npa);");

           $query->execute(array(
                   'dateHeure'                 => $unHistoriqueAMemoriser->getDateHeure(),
                   'commentaire'               => $unHistoriqueAMemoriser->getCommentaire(),
                   'animal_id'                 => $unHistoriqueAMemoriser->getAnimal_id(),
                   'cause_nom'                 => $unHistoriqueAMemoriser->getCause_nom(),
                   'personne_id'               => $unHistoriqueAMemoriser->getPersonne_id(),
                   'localite_npa'              => $unHistoriqueAMemoriser->getLocalite_npa()
               ));

           $query->closeCursor();
       }
       catch(PDOException $e)
        {
            return new Message("Historique non ajouté: ".$e->getMessage());
        }
               return $unHistoriqueAMemoriser;
   }
    /**
     * Methode permettant de modifier un historique
     * @param Historique historique à modifier
     * @return Message
     */
    public function modifier($unHistoriqueAModifier){
        try{
            
           $query =  $this->db->prepare("UPDATE historique SET commentaire = :commentaire, 
               cause_nom = :cause_nom, personne_id = :personne_id, localite_npa = :localite_npa 
               WHERE dateHeure = :dateHeure AND animal_id = :animal_id;");

           $query->execute(array(
                   'dateHeure'    => $unHistoriqueAModifier->getDateHeure(),
                   'animal_id'    => $unHistoriqueAModifier->getAnimal_id(),
                   'commentaire'  => $unHistoriqueAModifier->getCommentaire(),
                   'cause_nom'    => $unHistoriqueAModifier->getCause_nom(),
                   'personne_id'  => $unHistoriqueAModifier->getPersonne_id(),
                   'localite_npa' => $unHistoriqueAModifier->getLocalite_npa()
               ));
                   
                   $this->db->query($query);

           
           }
                catch(PDOException $e)
        {
            print($e->getMessage());
            return new Message("Historique non modifié");
        }
               return $unHistoriqueAModifier;
    }
    
    /**
     * Service Croud permettant de supprimer un historique
     * @param DateTime Date de l'historique
     * @param int identifiant de l'animal concerné
     * @return Boolean true si l'historique a été supprimé, false sinon.
     */
    public function supprimer($dateHistorique, $animal_id){
        $historiqueSupprime = false;
        try{
            $query = $this->db->prepare("DELETE FROM historique WHERE dateHeure = :dateHeure ".
                    "AND animal_id = :animal_id");
            
            $query->execute(array(
                'dateHeure'   => $dateHistorique,
                'animal_id'   => $animal_id
            ));
            $historiqueSupprime = true;
            $query->closeCursor();
        }
        catch(PDOException $e){
            echo $e->getMessage();
            $historiqueSupprime = false;
        }
        return $historiqueSupprime;
    }
   
    /**
     *
     * @param Personn historiqueALister de recherche sous forme d'objet Historique
     * @return un tableau d'objet Historique
     */
    public function lister($historiqueALister){
        try{
         

            $sql="SELECT * FROM historique ";
            $sql_Where="WHERE";
            if($historiqueALister!=NULL)
            {
                
                if($historiqueALister->getDateHeure()!=NULL)
                    $sql_Where.=" dateHeure = '".$historiqueALister->getDateHeure()."' AND ";
                if($historiqueALister->getAnimal_id()!=NULL)
                    $sql_Where.=" animal_id = '".$historiqueALister->getAnimal_id()."' AND ";
                if($historiqueALister->getCause_nom()!=NULL)
                    $sql_Where.=" cause_nom = '".$historiqueALister->getCause_nom()."' AND ";
                if($historiqueALister->getPersonne_id()!=NULL)
                    $sql_Where.=" personne_id = '".$historiqueALister->getPersonne_id()."' AND ";
            }         


            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." order by dateHeure;";
            $lesHistoriquesTrouves=NULL;
            $unHistoriqueLu=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unHistoriqueLu = new Historique($row['dateHeure'],$row['commentaire'],$row['cause_nom'],$row['personne_id'],$row['animal_id'],$row['localite_npa']);

                    $lesHistoriquesTrouves[]=$unHistoriqueLu;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesHistoriquesTrouves=NULL;
        }
        return $lesHistoriquesTrouves;
    }

  
}

?>
